package com.demo.java.OD251_300.OD284;

import java.util.*;

/**
 * @author bug菌
 * @Source 公众号：猿圈奇妙屋
 * @des： 【组合出合法最小数】问题
 * @url： https://blog.csdn.net/weixin_43970743/article/details/146079802
 */
public class OdMain {
    static ArrayList<Integer> listNoZero = new ArrayList<>(); // 存储非0开头的组合
    static ArrayList<Integer> listZero = new ArrayList<>();   // 存储0开头的组合

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String line = sc.nextLine().trim();
        String[] strings = line.split("\\s+");

        // 生成排列组合并分类存储
        solveMethod(strings, 0, strings.length);

        // 如果没有非0开头的组合，输出0开头组合中最小值
        if (listNoZero.isEmpty()) {
            Collections.sort(listZero);
            System.out.println(listZero.get(0));
        } else {
            Collections.sort(listNoZero);
            System.out.println(listNoZero.get(0));
        }
    }

    /**
     * 递归生成排列组合
     */
    private static void solveMethod(String[] strings, int index, int end) {
        if (index == end) {
            String res = String.join("", strings);  // 将数组转换为字符串
            int num = Integer.parseInt(res);        // 转为整数
            if (res.startsWith("0") && !res.equals("0")) {
                listZero.add(num);                 // 0开头组合加入listZero
            } else {
                listNoZero.add(num);               // 非0开头组合加入listNoZero
            }
        } else {
            for (int i = index; i < strings.length; i++) {
                swap(strings, i, index);            // 交换字符生成排列
                solveMethod(strings, index + 1, end);  // 递归下一层
                swap(strings, i, index);            // 回溯
            }
        }
    }

    /**
     * 交换数组元素
     */
    private static void swap(String[] strings, int a, int b) {
        String temp = strings[a];
        strings[a] = strings[b];
        strings[b] = temp;
    }
}